我想删除此数组中的所有重复项,但我无法使其正常工作。删除所有重复项后,我想创建一个没有删除数字的新数组。这是我的代码:
static void Main(string[] args)
{
int[] s = { 11, 11, 12, 12, 13, 13, 14, 15, 16 };
int[] q = s.Distinct().ToArray();
Console.WriteLine(q.ToString());
Console.ReadLine();
}
打印阵列{11,12,13,14,15,16};但我希望它能打印阵列{14,15,16}。
答案 0 :(得分:2)
使用:
int[] s = { 11, 11, 12, 12, 13, 13, 14, 15, 16 };
var NotDuplicateItems = s.GroupBy(r => r)
.Where(grp => grp.Count() == 1)
.Select(r => r.Key)
.ToArray();
以上内容将为您提供数组s
答案 1 :(得分:1)
Distinct
返回一个删除了所有重复条目的集合。但是,它不会删除原始项目(稍后重复)。
删除所有重复的项目,即具有" Count"大于1:
int[] q = s.Where(i => s.Count(j => j == i) == 1).ToArray();
这是O(n ^ 2),所以不要在大型集合上这样做。
答案 2 :(得分:1)
如果您知道您的输入数组将被排序(在您的示例中),您应该利用它。如果这样做,您可以迭代一次数组:
public int[] RemoveDuplicates(int[] source)
{
bool occurredOnce = true;
int currentItem = source[0];
var result = new List<int>();
for (int i = 1; i < source.Length; i++)
{
if (source[i] != currentItem)
{
if (occurredOnce)
{
result.Add(currentItem);
}
currentItem = source[i];
occurredOnce = true;
}
else
{
occurredOnce = false;
}
}
if (occurredOnce)
{
result.Add(currentItem);
}
return result.ToArray();
}
答案 3 :(得分:-1)
我现在无法编码..但这是我的思考过程......
取第一个数字,然后将其从字符串(或数组)的其余部分中删除。
然后搜索刚刚在字符串(或数组)中删除的那个数字。
如果再次发现,则不会打印该号码。如果没有 - 则显示数字。