c# - 在 C# 中查找给定的 2 个字符串数组中的位置和差异项
问题描述
string[] test1 = { "Alpha", "Beta", "Gamma", "Serial", "Beta","Power" };
string[] test2 = { "Alpha", "Gamma", "Serial", "Beta" };
需要输出:
test2数组中的位置 1缺少Beta
test2阵列中的位置 6缺少电源
在这里,即使是重复的,我们也不能忽略。即使重复记录中缺少一个,我们也需要确切的差异,就像这里我们有两次 Beta 但只有第一个位置丢失。
正在使用以下内容,但这有一种显示不同值的隐含方式,因此以下内容不会产生任何价值。
test1.Except(test2)
如果有人可以帮助我获得正确的代码吗?
解决方案
我希望这对您有所帮助,但我确信有一个更简单的解决方案。
internal class Program
{
private static void Main(string[] args)
{
string[] test1 = { "Alpha", "Beta", "Gamma", "Serial", "Beta", "Power" };
string[] test2 = { "Alpha", "Gamma", "Serial", "Beta" };
var groups = test1.Select((value, index) => new
{
Id = Guid.NewGuid(),
Value = value,
Total = test1.Count(x => x.Equals(value)),
Indexes = test1.FindAllIndexof(value)
}).GroupBy(x => x.Value).Select(x => x.First())
.Union(test2.Select((value, index) => new
{
Id = Guid.NewGuid(),
Value = value,
Total = test2.Count(x => x.Equals(value)),
Indexes = test2.FindAllIndexof(value)
}).GroupBy(x => x.Value).Select(x => x.First())).ToList();
var processedValues = new List<string>();
foreach (var currentGroup in groups)
{
if (processedValues.Contains(currentGroup.Value))
continue;
var groupToCompare = groups.FirstOrDefault(x => x.Value == currentGroup.Value && x.Id != currentGroup.Id);
if (groupToCompare == null)
{
Console.WriteLine($"{currentGroup.Value} is missing in positions {string.Join(",", currentGroup.Indexes)}");
}
else if (currentGroup.Total < groupToCompare.Total)
{
var differentIndexes = groupToCompare.Indexes.OrderByDescending(x => x).Skip(currentGroup.Indexes.Length - 1);
Console.WriteLine($"{currentGroup.Value} is missing in positions {string.Join(",", differentIndexes)}");
}
else if (currentGroup.Total > groupToCompare.Total)
{
var differentIndexes = currentGroup.Indexes.OrderByDescending(x => x).Skip(currentGroup.Indexes.Length - 1);
Console.WriteLine($"{currentGroup.Value} is missing in positions {string.Join(",", differentIndexes)}");
}
processedValues.Add(currentGroup.Value);
}
Console.ReadKey();
}
}
public static class NumberExtensions
{
public static int[] FindAllIndexof<T>(this IEnumerable<T> values, T val)
{
return values.Select((b, i) => object.Equals(b, val) ? i : -1).Where(i => i != -1).ToArray();
}
}
结果:
位置 1 中缺少 Beta
位置 5 电源缺失
推荐阅读
- dax - 排除持续时间计算的特定时间
- javascript - NextJS 环境变量未定义?
- python - BeautifulSoup 返回所有链接,而不是第一个链接
- excel - 运行时错误“13”:输入单元格范围时类型不匹配
- c# - 我可以通过控制器构造函数获取路由参数吗?
- python - +/- 不适用于 python kivy gui 计算器
- javascript - 如何在一维数组中找到曼哈顿距离?
- java - 无法从 Excel 文件中读取
- python - Python Crash Course - 13-5 Sideways Shooter Pt 2, Adding the aliens
- sum - 如何使用循环来添加特定行