如何解决将键值对对列表中的键与闭合值c#连接起来
我有一个
以下是我列表的键和值:
卢格:9
汉堡:9
勒:21
鸽子:21
汉堡:21
汉堡:25
双:30
动物:31
风格:31
:43
原文:43
汉堡:44
这是我想要实现的输出:
Luger Burger
鸽子鸽
汉堡
双重动物风格
原始汉堡
要实现此目的,首先我创建了一个包含此键值对的列表。然后遍历每个项目,并尝试找到接近的值,将它们分配给新的键值对,然后删除该索引。但这不能正常工作。到目前为止,这就是代码:
for (int i = 0; i < wordslist.Count; i++)
{
for (int j = 0; j < wordslist.Count; j++)
{
if (wordslist[i].Value <= wordslist[j].Value + 3 && wordslist[i].Value >= wordslist[j].Value - 3)
{
wordslist.Add(
new keyvaluePair<string,int>(wordslist[i].Key + " " + wordslist[j].Key,wordslist[i].Value)
);
wordslist.RemoveAt(j);
}
}
wordslist.RemoveAt(i);
}
这不起作用并产生如下重复结果:
鸽子:21
风格:30
汉堡:30
Double Double Animal:30
汉堡汉堡:31
Original Original The Original Burger原始汉堡:42
是否有任何算法可以迭代这些项目并通过合并具有接近值的键并将每个项目添加到列表中来构造字符串?
解决方法
您可以简化此逻辑:
public IEnumerable<string> GetPlusOrMinus3(Dictionary<string,int> fullList,int checkNumber)
{
return fullList.Where(w => checkNumber <= w.Value + 3
&& checkNumber >= w.Value - 3)
.Select(s => $"{s.Key}: {s.Value}" );
}
字符串格式对您来说并不理想,但逻辑应该成立。
在使用中,您可以执行以下操作:
var forOne = GetPlusOrMinus3(values,1);
var resultString = String.Join(",",forOne);
Console.WriteLine(resultString);
哪个会写出来:
一:1,二:2,四:4
并遍历所有内容:
foreach(var entryValue in values.Values)
{
Console.WriteLine(String.Join(",GetPlusOrMinus3(values,entryValue)));
}
或者在不重用任何结果的情况下循环浏览任何东西:
var matchedNumbers = new List<int>();
foreach(var entryValue in values.Values)
{
var matchResults = values.Where(w => entryValue <= w.Value + 3 && entryValue >= w.Value - 3
&& !matchedNumbers.Contains(w.Value)).ToDictionary(x => x.Key,x => x.Value);
if (matchResults.Any())
{
matchedNumbers.AddRange(matchResults.Select(s => s.Value).ToList());
Console.WriteLine(String.Join(",GetPlusOrMinus3(matchResults,entryValue)));
}
}
日志:
one: 1,two: 2,four: 4
twelve: 12,10: 10,eleven: 11
six: 6
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。