我想这个问题可能会部分重复其他类似的问题,但我在这种情况下遇到了麻烦:
我想从一些字符串中提取
例如从
`string sentence = "We can store these chars in separate variables. We can also test against other string characters.";`
我想建立一个 IEnumerable 的话;
var separators = new[] {',', ' ', '.'};
IEnumerable<string> words = sentence.Split(separators, StringSplitOptions.RemoveEmptyEntries);
之后,遍历所有这些words
并将第一个字符放入一个不同的升序字符集合中。
var firstChars = words.Select(x => x.ToCharArray().First()).OrderBy(x => x).Distinct();
之后,遍历这两个集合,并为每个字符firstChars
获取所有具有等于的items
字符并创建一个.words
first character
current character
Dictionary<char, IEnumerable<string>> dictionary
我正在这样做:
var dictionary = (from k in firstChars
from v in words
where v.ToCharArray().First().Equals(k)
select new { k, v })
.ToDictionary(x => x);
这就是问题所在:An item with the same key has already been added.
Whis 是因为在该字典中它将添加一个现有字符。
我在查询中包含了一个GroupBy
扩展
var dictionary = (from k in firstChars
from v in words
where v.ToCharArray().First().Equals(k)
select new { k, v })
.GroupBy(x => x)
.ToDictionary(x => x);
上面给出的解决方案一切正常,但它给了我比我需要的其他类型。
我应该怎么做才能得到结果 Dictionary<char, IEnumerable<string>>dictionary
但不是 Dictionary<IGouping<'a,'a>>
?
我想要的结果如下图所示: 但是在这里我必须使用 2 个 foreach(s) 进行迭代,这将向我展示我想要的...我无法很好地理解这是如何发生的...
任何建议和建议都将受到欢迎。谢谢你。