如何在c#中显示数组中重复的元素位置

时间:2016-02-02 15:11:49

标签: c# arrays

如何在c#console

中的数组中显示索引位置的重复元素

我有这个问题 在简单的c#中 用户给了我5个数字并存储在一个数组中,现在我给了用户选项来检查其位置的数字

现在的问题是,如果用户之前存储的5个数字中有2个或更多相同的数字..我是如何显示这两个位置的?

using System;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[5];
            int check = 0;
            int position = 0;

            Console.WriteLine("Enter 5 elements");

            for (int i = 0; i < 5; i++)
            {
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }

            int value;
            Console.WriteLine("Enter no to search");
            value = Convert.ToInt32(Console.ReadLine());

            for (int i = 0; i < 5; i++)
            {
                if (value==arr[i])
                {
                    {
                        check = 1;
                        position = i;

                    }
                }
            }
            if (check == 1)
            {
                Console.WriteLine("number is found At position " +position);
            }
            else
            {
                Console.WriteLine("not found");
            }
            Console.ReadKey();
        }
    }
}

请帮帮我

如果用户输入的数字为1 2 3 1 2 并存储它们 然后当用户搜索nos 它应该显示在第1和第2位置的数字? 帮助

4 个答案:

答案 0 :(得分:0)

您可以在检查循环中输出找到的数字的索引,如下所示:

bool check = false;
for (int i = 0; i < 5; i++)
{
    if (value==arr[i])
    {
        check = true;
        Console.WriteLine("number is found At position {0}", i);
     }
}
if (!check) Console.WriteLine("Number not found at all.");

或者您将索引保存在列表中并在之后输出:

List<int> foundIndices = new List<int>();
for (int i = 0; i < 5; i++)
{
    if (value==arr[i])
        foundIndices.Add(i);
}
if (foundIndices.Count > 0)
    foreach(int index in foundIndices)
        Console.WriteLine("Number found at {0}", index);
else
    Console.WriteLine("Number not found at all.");

答案 1 :(得分:0)

要查找重复内容,您可以尝试使用 Linq

onCreate()

答案 2 :(得分:0)

//Used to track position of found numbers
var currentPosition = 0;
//Keeps the indexes 
var foundIndexes = new List<int>();
//Some dummy data
int[] numbers = {1, 2, 3, 5, 2, 3, 3, 5, 7};
for (var i = 0; i < numbers.Length; i++)
    {
       if (numbers[i] == value)
       {
           foundIndexes.Add(i);
       }
    }
//can use the LINQ for each if you like it better (I do)
foundIndexes.ForEach(index =>
{
     Console.WriteLine("number is found At position " + index);
});

答案 3 :(得分:0)

这是另一个如何使用LINQ执行此操作的示例:

var appearsMoreThanOnce = arr
    .Distinct()
    .ToDictionary(k => k, v => Enumerable.Range(1, arr.Length)
        .Where(i => arr[i-1] == v))
    .Where(kvp => kvp.Value.Count() >= 2);

foreach (var number in appearsMoreThanOnce)
    Console.WriteLine(number.Key + " appears at: " + string.Join(",", number.Value));

LINQ可能非常令人生畏,特别是如果你是新手 - 我可以进一步详细说明这个解决方案如何有效。