例如,我有這樣一個陣列,以后我需要在其中進行搜索:
private static readonly decimal[] ArrayWithFiveElements = { 0. 1m, 0.2m, 0.3m, 0.4m, 0.5m };
然后我有一個范圍陣列,定義了要搜索的元素:
我有一個范圍陣列。
decimal[][] ranges =
{
new[] { 0.1m, 0.2m },
new[] { 0.4m, 0.5m },
new[] { decimal.Zero, decimal.One },
};
現在我的代碼應該做的是回傳符合范圍條件的元素的出現次數。現在,如果我試圖在沒有最后一個陣列的情況下計算這些范圍,我會得到4個:0.1米、0.2米、0.4米和0.5米,但如果我們試圖用最后一個陣列(它與前面兩個陣列重疊)來計算,我會得到9個:0.1米、0.2米、0.4米、0.5米、0.1米、0.2米、0.3米0.4米和0.5米。我想要的結果是5:0.1m, 0.2m, 0.3m, 0.4m, 0.5m。
我怎樣才能通過陣列計數,并且如果陣列與前面陣列中的一些元素重疊,它將忽略這些元素,如果有一個未計數的元素,它將添加到計數中,而不是多次添加所有重疊的元素。
這是我目前的代碼:
這是我目前的代碼。
public static int GetDecimalsCount(span class="hljs-built_in">decimal[] arrayToSearch, decimal[] [] ranges)?
{
if (arrayToSearch is null)
{
throw new ArgumentNullException(nameof(arrayToSearch)) 。
}
else if ( ranges is null)
{
throw new ArgumentNullException(nameof(range))。
}
else; }
{
for (int x = 0; x < ranges.Length; x )
{
if ( ranges[x] is null)
{
throw new ArgumentNullException(nameof(range))。
}
else if ((ranges[x].Length > 0 && ranges[x].Length < 2) || ranges[x].Length > 2)
{
throw new ArgumentException(null)。
}
}
int sum = 0;
for (int i = 0; i < arrayToSearch.Length; i )
{
for (int j = 0; j < ranges.Length; j )
{
if ( ranges[j].Length == 0)
{
continue;
}
else if (arrayToSearch[i] >= ranges[j][0] && arrayToSearch[i] <= ranges[j] [1] )
{
sum ;
}
}
}
return sum;
}
}
uj5u.com熱心網友回復:
有很多方法可以做到這一點,一個是使用Any
public static int GetDecimalsCount(span class="hljs-built_in">decimal[] arrayToSearch, decimal[] [] ranges)?
{
if (arrayToSearch == null) throw new ArgumentNullException(nameof(arrayToSearch))。
if (ranges == null) throw new ArgumentNullException(nameof(range) )。)
if ( ranges.Any(x =>x?.Length != 2) throw new ArgumentException("Invalid ranges",nameof( ranges))。
return arrayToSearch.Sum(item =>
range.Any(range =>
item >= range[0] & &
item <= range[1]) ? 1 : 0)。)
}
。
你也可以為自己省去一些麻煩,使用一個記錄的范圍
。給出
public record Range(decimal From, decimal To)
{
public bool Check(decimal value) => value >= From && value <= To;
}
示例
public static int GetDecimalsCount(decimal[] arrayToSearch, Range[] ranges)。
{
if (arrayToSearch == null) throw new ArgumentNullException(nameof(arrayToSearch))。
if (ranges == null) throw new ArgumentNullException(nameof(range) )。)
return arrayToSearch.Sum(item => ranges.Any(range => range.Check(item)) ? 1 : 0)。)
}
使用方法
var ranges = new Range[] 。
{
new( 0.1m, 0.2m ) 。
new(0.4m, 0.5m) 。
new(decimal.Zero, decimal.One)
};
如果你需要在回圈中這樣做的話
public static int GetDecimalsCount(span class="hljs-built_in">decimal[] arrayToSearch, decimal[] [] ranges)?
{
if (arrayToSearch == null) throw new ArgumentNullException(nameof(arrayToSearch))。
if (ranges == null) throw new ArgumentNullException(nameof(range) )。)
if ( ranges.Any(x => x?.Length != 2) throw new ArgumentException("Invalid ranges", nameof( ranges))。
var sum = 0;
foreach (var item in arrayToSearch)
foreach (var range in ranges)
if (item >= range[0] && item <= range[1] )
{
sum ;
break;
}
return sum;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309993.html
標籤:
