【问题标题】:Why i cant join string with first value of dictionary?为什么我不能用字典的第一个值加入字符串?
【发布时间】:2017-12-06 10:08:34
【问题描述】:

我想问为什么我不能用字典的第一个值加入字符串?

Dictionary<string, int> d = new Dictionary<string, int>()
{
    {"cat", 0},
    {"dog", 1},
    {"llama", 2},
    {"iguana", 3}
};

string z = string.Join("Test_", d.Select(x => x.Value + "\n"));

这些是Z现在的值

0
Test_1
Test_2
Test_3

【问题讨论】:

  • 阅读文档 string.Join 正在做什么。对我来说这是预期的结果
  • 可以,但是它不会返回你期望的结果。
  • 您的预期结果是什么?如果你想要 Test_cat,Test_dog 那么你不能使用x.Value,因为它们是字典的键
  • @HimBromBeere 这就是我所说的 :) “你不能使用 x.Value”
  • @TheSkimek 但这不是问题所在。 „为什么我不能加入 first 值...“

标签: c# string dictionary


【解决方案1】:

string.Join 连接具有指定值的字符串。您想要的是为所有字符串添加一个值,因此请改用String.Concat

string z = string.Concat(d.Select(x => "Test_" + x.Value + "\n"));

【讨论】:

  • 感谢您的快速和有用的回答
【解决方案2】:

请先阅读String.Join documentation

您需要使用 String.Concat,而不是 String.Join。

区别:

  • String.Concat 只是将字符串集合合并到最终字符串。例如。 String.Concat(new []{"1", "2", "3"}) 返回“123”
  • String.Join 还添加了项目之间的分隔符。所以,String.Join(", ", new []{"1", "2", "3"}) 返回“1, 2, 3”。

所以,您要求使用“Test_”作为分隔符。当然,分隔符不会在第一个参数之前添加。添加请使用string.Concat(d.Select(x =&gt; "Test_" + x.Value + "\n"));

【讨论】:

  • 感谢您的帮助!现在完全明白了。
【解决方案3】:

string.Join 方法将分隔符放在序列的元素之间,而不是放在每个元素的前面。所以,例如

string[] values = new[] { "one", "two" };
string x = string.Join(" and ", values);

将产生"one and two",而不是"and one and two"

【讨论】:

  • 非常感谢!现在明白了
【解决方案4】:

如果你心情好,可以使用SelectMany(字符串也是IEnumerable&lt;char&gt;)将所有字符串流出来,并以此方式构造连接的字符串。

var z = new string( d.SelectMany( x => x.Value.ToString("Test_0\n")).ToArray());

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2012-02-01
    • 1970-01-01
    • 2016-03-24
    • 2011-09-13
    • 2015-07-20
    • 2020-10-06
    • 2022-11-30
    相关资源
    最近更新 更多