我是C#的新手,我想知道在float数组的末尾是否有删除特定值(0)的函数?
例如:
float[] samples = {0.0, 4.0, 2.5, ..., 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
通话后,我希望我的样品是:
samples == {0.0, 4.0, 2.5, ..., 2.0}
谢谢您的帮助
答案 0 :(得分:6)
我将从找到最终的非零索引开始:
int i = samples.Length - 1;
for( ; i >= 0; i--)
if(samples[i] != 0.0F) break;
然后我要么复制该子集(包括0
-i
),要么为了避免分配,我将使用Span<T>
将自己限制为该部分而不创建新的数组:
var span = new Span<float>(samples, 0, i + 1);
答案 1 :(得分:2)
float[] samples = { 0.0f, 4.0f, 2.5f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
var clean = new List<float>();
for (int i = 0; i <samples.Length; i++)
{
if (i == 0)
{
if (samples[i] == 0.0f) clean.Add(samples[i]);
continue;
}
if (samples[i] != 0.0f) clean.Add(samples[i]);
}
//clean.ToArray() = float[]
这可能是更好的解决方案
float[] samples = { 0.0f, 4.0f, 2.5f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
List<float> clean = samples.ToList();
for(int i=clean.Count-1; i>0; i--)
{
if (clean[i] == 0.0f) clean.RemoveAt(i);
else break;
}
//clean.ToArray()
答案 2 :(得分:0)
目前,我已经尝试过了,它可以用于我想要的功能,但我不确定它是最简单的:
float[] samples = new float[AudioFeedbackList[i].GetComponent<AudioSource>().clip.samples * AudioFeedbackList[i].GetComponent<AudioSource>().clip.channels];
List<float> sampi = new List<float>();
sampi.AddRange(samples);
int j = sampi.Count;
while (sampi[j - 1] == 0.0f)
{
j--;
}
List<float> newSampi = new List<float>();
for (int k = 0; k < j; k++)
{
newSampi.Add(sampi[k]);
}
samples = newSampi.ToArray();
感谢您的反馈!