我明白了!事实证明它是打印到控制台,但它会打印出类似的东西 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;
}
}
答案 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);
}