帮我把这个二维数组代码从PHP转换为C#

Help me convert this 2d array code from PHP to C#

提问人:Andrew G. Johnson 提问时间:2/5/2010 更新时间:2/5/2010 访问量:493

问:

请帮我把这个代码示例用PHP重写为C#:

$stringArray = array();
$stringArray['field1'] = 'value1';
$stringArray['field2'] = 'value2';
$stringArray['field3'] = 'value3';

foreach ($stringArray as $key => $value)
{
    echo $key . ': ' . $value;
    echo "\r\n";
}
C# PHP

评论


答:

1赞 Daniel Brückner 2/5/2010 #1
var map = new Dictionary<String, String>
              {
                  { "field1", "value1" },
                  { "field2", "value2" },
                  { "field3", "value3" }
              }

或者不使用集合初始值设定项。

var map = new Dictionary<String, String>();

map["field1"] = "value1";
map["field2"] = "value2";
map["field3"] = "value3";

在经常被忽视的命名空间中,甚至还有一个专门的类可以将字符串映射到字符串,但我更喜欢,因为它实现了一组更丰富的接口。StringDictionarySystem.Collections.SpecializedDictionary<TKey, TValue>

评论

0赞 Andrew G. Johnson 2/5/2010
对不起,我的错没有更具体,想一次添加一个。最后还加了一个循环的东西,反正点赞了:)
5赞 Andrew Moore 2/5/2010 #2

C# 中不存在命名数组。另一种方法是使用 Dictionary<string, string> 重新创建类似的结构。

Dictionary<string, string> stringArray = new Dictionary<string, string>();
stringArray.Add("field1", "value1");
stringArray.Add("field2", "value2");
stringArray.Add("field3", "value3");

为了循环访问它们,您可以使用以下命令:

foreach( KeyValuePair<string, string> kvp in stringArray ) {
    Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}

评论

0赞 Steve Wortham 2/5/2010
这也具有强类型的优点。必须喜欢泛型。
0赞 Andrew Moore 2/5/2010
@Steve:迄今为止在 CLR 2.0 中实现的最佳语言功能。
0赞 Steve Wortham 2/5/2010
事实上。大多数时候,这些低级优化并没有真正受到重视,因为它通常不是瓶颈所在。但是,我为数不多的能够观察到性能优势的一次是我为井字游戏编写的一些AI。一旦我切换到泛型并消除了任何类型转换的需要,我就将性能提高了 25% 以上。
0赞 Francisco Noriega 2/5/2010
如果您仅在值中使用字符串,则还有 StringDictionary 类。我真的不确定它是否比通用的 dictionary<string,string> 更好,但它是一个强类型的哈希表,专门用于字符串。
0赞 Francisco Noriega 2/5/2010
只是为了补充我的另一篇文章,您可以这样使用它: StringDictionary myCol = new StringDictionary();myCol.Add( “红色”, “罗霍” );myCol.Add( “绿色”, “佛得角” );myCol.Add( “蓝色”, “蓝色” );
0赞 mlennox 2/5/2010 #3

您正在尝试重新创建一个关联数组 - 在 C# 中,我通常会使用字典

Dictionary<string,string> stringArray = new Dictionary<string,string>();

然后,您可以通过两种方式分配值

stringArray["field1"] = "value1";
stringArray.Add("field2","value2");

字典可用于存储任何键/值对组合,例如:

Dictionary<int,string>()
Dictionary<long,KeyValuePair<string,long>>()
etc.

如果您绝对知道只需要一个字符串键,该字符串将返回一个字符串值,那么您还可以使用 NameValueCollection

NameValueCollection stringArray = new NameValueCollection();

同样,您可以使用相同的两种方法来添加值

stringArray["field1"] = "value1";
stringArray.Add("field2","value2");

这两种数据类型还具有其他方便的方法,例如

stringArray.Clear(); // make it empty
stringArray.Remove("field1"); // remove field1 but leave everything else

查看 Visual Studio 中的 IntelliSense,获取更多好东西

其他节点

请注意,a 并不(仅)提供一对一的映射 - 您可以将多个值与单个名称相关联。NameValueColelction

var map = new NameValueCollection();

map.Add("Bar", "Foo");
map.Add("Bar", "Buz");

// Prints 'Foo,Buz' - the comma-separated list of all values
// associated with the name 'Bar'.
Console.WriteLine(map["Bar"]);

评论

0赞 mlennox 2/5/2010
感谢您的澄清丹尼尔 - 我不经常(故意...... - 干杯