【发布时间】:2016-05-12 06:12:06
【问题描述】:
我有一个包含 int 和 string 的 List Tuple,每次我向这个列表添加新位置时,我都会在已添加的元素中检查相同的字符串。一旦我看到相同的内容 - 目标是改变 int (做+1)。例如,如果我们有 (3, box; 1, apple; 2, PC),我们需要添加“apple”,所以我必须将现有的“1, apple”更改为“2, apple”。 但我不能这样做,因为 Item1 返回错误“该属性没有设置器”。 我的错在哪里? 谢谢。
string[] elements = s.Split(); // Contains all elements as strings.
List<Tuple<int, string>> elementsList = new List<Tuple<int, string>>();
var sortItems = elementsList.OrderBy(x => x.Item1);
for (int i = 0; i < elements.Length; i++)
{
foreach (var item in sortItems)
{
if (Equals(item.Item1, elements[i]))
{
item.Item1 += 1;
}
}
elementsList.Add(new Tuple<int, string>(1, elements[i]));
}
return elementsList;
【问题讨论】:
-
一定要使用
List<Tuple<int, string>>吗?我认为如果您为此使用Dictionary<string, int>,您的代码会简单得多。 -
一个更好的方法是
var list = elements.GroupBy(e => e).Select(g => Tuple.Create(g.Count(), g. Key)).ToList();或类似的。 -
同意@CoolBots 的评论,通用的
Dictionary正是你所需要的,因为它是基于哈希表的,因此在字典中的搜索会比在List中快得多