【问题标题】:C# Print all items in an array that has repeated numbers. It only seems to print unique numbersC# 打印具有重复数字的数组中的所有项目。它似乎只打印唯一的数字
【发布时间】:2017-09-04 11:41:28
【问题描述】:

我想通了!原来它正在打印到控制台,但它会打印出类似的东西 1 (2) 个 2 (2) 3(3)

表示每个数字都去了两次。如果我打印带有试用计数的数字,我会得到我正在寻找的东西 TC 1,数字 1 TC 2,数字 2 TC 3,数字 3 TC 4,数字 1 TC 5,数字 2 TC 6,数字 3

感谢您的所有建议。


我是 C# 的新手,遇到了一个我似乎找不到解决方案的问题。

我有一个具有 6 个插槽的浮点数组,其中 3 个插槽是重复数字
( 1.0f,2.0f,3.0f,1.0f,2.0f,3.0f).

每次点击“a”时,我都需要将这些数字中的每一个都打印给领事。

问题是在前 3 个数字之后它停止打印 - 在控制台中我得到:

1,2,3....索引超出范围

我使用数组中的数字来更改对象的大小。这个对象会随着每个“a”的推送而继续改变大小,所以我知道它正在遍历整个数组。

我怎样才能让它打印副本?

这是我的代码的简短版本,它已被缩短以删除不相关的内容。

*********************************************************************
public class ChangeSize : MonoBehaviour {
float[] numbers;

int MyIndex;
public int Range;

int trialCount = 0;

// Use this for initialization
void Start () { //************************************Start

numbers = new float[] { 1.0f,2.0f,3.0f,1.0f,2.0f,3.0f };

}

// Update is called once per frame
void Update()
{

    changeSizeObj();
}


//**************************************************Functions

void changeSizeObj() {
    if (Input.GetKeyDown("a"))
    {
        transformSize();
    }
}


void transformSize()
{

    float num = numbers[trialCount];
    print(num);

    transform.localScale = new Vector3(num, num, num);
    trialCount += 1;

}

}

【问题讨论】:

  • 抱歉代码出现问题。我不确定为什么 float[] numbers;在公共类 ChangeSize 上:MonoBehaviour {
  • 您打算如何解决3.999999f4.0000001f 问题(汇总错误问题)?你确定你有一个 float 数组吗?
  • 如果你想打印副本。您需要对其进行编程。您应该创建一个列表/哈希集来跟踪您已经“看到”的数字
  • Update检查一次密钥'A' 您可能想检查密钥是否也被释放。它可能走得太快了。显示 print 值可能会有延迟,因此在打印所有值之前会引发错误。例如,您可以通过添加调试延迟 Thread.Sleep(1000) 来对此进行测试。如果钥匙被释放,最好等待。
  • 嗨,Dmitry,我不打算解决四舍五入问题,因为这对我想做的事情来说似乎没什么大不了的。而且我很确定该数组是一个浮点数组。谢谢

标签: c# arrays printing duplicates


【解决方案1】:

要仅打印重复项,您可以执行以下操作:

*********************************************************************
public class ChangeSize : MonoBehaviour 
{
    float[] numbers;
    HashSet<float> numberCheck;   // hashset


    int MyIndex;
    public int Range;

    int trialCount = 0;

    // Use this for initialization
    void Start () { //************************************Start

        numbers = new float[] { 1.0f,2.0f,3.0f,1.0f,2.0f,3.0f };

    }

    // Update is called once per frame
    void Update()
    {

        changeSizeObj();
    }


    //**************************************************Functions

    void changeSizeObj() {
        if (Input.GetKeyDown("a"))
        {
            transformSize();
        }
    }


    void transformSize()
    {

        float num = numbers[trialCount];

        if (numberCheck.Contains(num))  // check for duplicates
            print(num);
        else
            numberCheck.Add(num);

        transform.localScale = new Vector3(num, num, num);
        trialCount += 1;

    }
}

// *******

或者利用这个方法:

public static IEnumerable<T> GetDuplicates<T>(this IEnumerable<T> items)
{
    HashSet<T> seen = new HashSet<T>();

    foreach (var item in items)
        if (seen.Contains(item))
            yield return item;
        else
            seen.Add(item);
}

用法:

    // Use this for initialization
void Start () { //************************************Start

    numbers = new float[] { 1.0f,2.0f,3.0f,1.0f,2.0f,3.0f };

    for(var num in numbers.GetDuplicates())
        print(num);
}

【讨论】:

  • 谢谢!我会对此进行研究,因为我相信它在未来会有所帮助。事实证明我的问题比我简单得多,我只是不理解控制台输出。不过感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
相关资源
最近更新 更多