【问题标题】:How to compare numbers in an array如何比较数组中的数字
【发布时间】:2015-10-20 22:14:27
【问题描述】:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DiceGame
{
class Program
  {



    static void Main(string[] args)
    {
        Random randomnumber = new Random();

        int[] Player = new int[5];
        Player[0] = randomnumber.Next(1, 6); 
        Player[1] = randomnumber.Next(1, 6); 
        Player[2] = randomnumber.Next(1, 6); 
        Player[3] = randomnumber.Next(1, 6); 
        Player[4] = randomnumber.Next(1, 6);
        Console.WriteLine("You rolled a " + Player[0] + " " + Player[1] + " " + Player[2] + " " + Player[3] + " " + Player[4]);
         Console.WriteLine(" You have a " + however many are equal);
    }
  }
}

编辑:我需要将数组中的多个数字相互比较。它们是随机的 1-6,如果 2 彼此相等,我需要显示对。如果3相等则显示3个,如果4个4个5个,5个个

edit2:我唯一能找到的是这个,但它只将 Player[0] 与数组的其余部分进行比较

for (int i = 0; i < Player.Length; i++)
        {
            int count = 0;
            for (int j = 0; j < Player.Length; j++)
            {
                if (Player[i] == Player[j])
                    count = count + 1;
            }

            Console.WriteLine("\t\n " + Player[i] + " occurs " + count);




            Console.ReadKey();

【问题讨论】:

  • 这里只有一个数组。你想和什么比较?
  • “如果 2 相等”是什么意思? (顺便说一句,在 Stack Overflow 上,使用完整的英语而不是文本语言通常会有所帮助。)
  • 你试过什么?此外,请尝试使用完整的单词,这样可以更容易阅读问题,并且您可能看起来对帮助的人有些尊重。
  • 与数组中的其他数字
  • @RyanVanDusen 请向我们展示您的尝试。也许这会更清楚地说明实际问题。

标签: c# arrays comparison


【解决方案1】:

您可以使用foreach 循环按常规方式编写此代码:

int theSame = 0;
foreach (var x in Player)
{    
     int localTheSame = 0;
     foreach (var y in Player)
     {
         if (x == y)
         {
             localTheSame++;
         }
     }

     if (localTheSame > theSame)
     {
         theSame = localTheSame;
     }
}       

我在你编辑之前写了这个答案,所以我认为你想显示任何数字的最大出现次数。

编辑

使用 LINQ 的相同解决方案:

int theSame = Player.Max(x => Player.Count(y => x == y));

【讨论】:

  • 这行得通,我的编辑二是说我唯一尝试过的只是将它与数组中的第一个进行比较,我正在寻找最大的出现次数,非常感谢
  • @RyanVanDusen 我使用 LINQ 添加了一个解决方案。如果您熟悉它,它是 1 行而不是 15 行左右。
【解决方案2】:

您可以使用 LINQ 获取每个数字的计数。

 Random randomnumber = new Random();

        int[] Player = new int[5];
        Player[0] = randomnumber.Next(1, 6); 
        Player[1] = randomnumber.Next(1, 6); 
        Player[2] = randomnumber.Next(1, 6); 
        Player[3] = randomnumber.Next(1, 6); 
        Player[4] = randomnumber.Next(1, 6);
        Console.WriteLine("You rolled a " + Player[0] + " " + Player[1] + " " + Player[2] + " " + Player[3] + " " + Player[4]);
        var selected = from x in Player.AsEnumerable()
                       group x by x into g
                       select new { Digit = g.Key, DigitCount = g.Count()};
     foreach(var sel in selected)
     {
       Console.WriteLine("You have rolled " + sel.Digit + " no of times " + sel.DigitCount);
     }

【讨论】:

  • 您应该通过在循环中初始化 player 的每个值来更新答案。
  • @KevinAvignon 我刚刚接受了 OP 发布的内容并添加了他想要的逻辑。是的,你是对的,初始化可以在循环内完成。
【解决方案3】:

你可以这么简单:

foreach (var p in Player.GroupBy(x => x).Select(x => new { Player = x.Key, Count = x.Count()}))
            Console.WriteLine("Player {0} occurs {1} time{2}", p.Player, p.Count, p.Count == 1 ? "s" : "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多