我有这个代码而且不起作用。此代码应删除数组中的每个连续副本,但它不起作用。它以与以前完全相同的格式返回数组。我有" Car"," Truck"," Truck"," Car"并得到完全相同的结果。我应该得到" Car"," Truck"," Car"。
两个阵列版本都给出了相同的结果。
版本1:
for (int i = 0; i < array.Length; i++)
{
if (i == 0 || result[i - 1] != array[i])
{
result[i] = array[i];
}
}
版本2:
result[0] = array[0];
for (int i = 1; i < array.Length; i++)
{
if (i == 0 || result[i - 1] != array[i])
{
result[result.Length - i] = array[i];
}
}
但下面的代码使用数组列表。有人可以告诉我为什么会这样吗?
List<string> results = new List<string>();
foreach (string element in array)
{
if (results.Count == 0 || results.Last() != element)
results.Add(element);
}
答案 0 :(得分:0)
这对你有用。我测试了这段代码。它将操纵相同的变量。
var myArray = new string[] { "Car", "Truck", "Truck", "Car" }.ToList();
for (int i = 0; i < myArray.Count() - 1; i++)
{
if (myArray[i].Equals(myArray[i + 1]))
{
myArray.RemoveAt(i);
i--;
}
}
您需要从结果数组中删除所有空值。检查下面代码的更新版本。
var myArray = new string[] { "Car", "Truck", "Truck", "Car" };
var result = new string[myArray.Length];
版本1
for (int i = 0; i < myArray.Length; i++)
{
if (i == 0 || result[i - 1] != myArray[i])
{
result[i] = myArray[i];
}
}
版本2
result[0] = myArray[0];
for (int i = 1; i < myArray.Length; i++)
{
if (result[i - 1] != myArray[i])
{
result[i] = myArray[i];
}
}
在两个版本之后执行以下操作以删除空值。
result = result.Where(r => r != null).ToArray();
答案 1 :(得分:0)
你的代码示例不起作用的原因是你(可能是因为代码不在那里)有第二个数组被初始化如下:
default(string)
所以这是一串myArray
的字符串,它是空的。
然后循环result[i] != myArray[i]
中的所有项目,myArray[i]
的检查始终为真,除非var array = new[] { "a", "a", "a", "b", "b", "b" };
array = array.Distinct().ToArray();
为空。
我认为你的逻辑只是想创建一个唯一项目数组。
如果是这样,那么非常有效和单行的方式是:
{{1}}