C#打印具有重复数字的数组中的所有项目。它似乎只打印唯一的数字

时间:2017-09-04 11:41:28

标签: c# arrays printing duplicates

我明白了!事实证明它是打印到控制台,但它会打印出类似的东西 1(2) 2(2) 3(3)

表示每个号码已经过两次。如果我用试验计数打印数字,我就会得到我想要的东西 TC 1,Num 1 TC 2,Num 2 TC 3,Num 3 TC 4,Num 1 TC 5,Num 2 TC 6,Num 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;

}

}

1 个答案:

答案 0 :(得分:0)

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

*********************************************************************
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);
}