J'ai cette gamme de prix, formée dans une chaîne comme celle-ci:
Ceci signifie Les prix vont de p> et p> et p> et p> Je veux vérifier si une nouvelle gamme de prix est dans notre gamme de prix acceptable. Voici mon code jusqu'à présent: p> Ce code fonctionne si le début du début et de l'extrémité correspond au début et à la fin de la plage. P> Par exemple, Si Cependant, si le 100: 105, 110: 120, 150: 200, 240: 245 Code> P>
100 à 105 code> p>
110 à 120 code> p> P> P>
150 à 200 code> p>
240 à 245 code> p> P>
ibegin = 110 code> et
iend = 120 code>, mon code le trouvera en fonction de si
110: 120 code> existe dans la liste. P>
iend = 115 code> il ne le trouvera pas. p> p>
3 Réponses :
Vous devez diviser les gammes, analyser les chiffres et les vérifier:
var search = new {from = 110, to= 115}; var found = "100:105,110:120,150:200,240:245" .Split(',') //split in parts like 100:105 .Select(p => { var parts = p.Split(':'); // split the range from/to var from = int.Parse(parts[0]); //convert from/to to ints var to = int.Parse(parts[1]); return new { from, to }; }) //check if any range matches the search values .Any(range => search.from >= range.from && search.to <= range.to); Console.WriteLine($"Found: {found}");
Et espérons-le, pas le scission et l'analyse de chaque fois que vous devez vérifier une nouvelle gamme.
bool IsInRange(int ibegin, int iend, string BeginEnd) { string[] strBeginEnd = BeginEnd.Split(','); foreach (var range in strBeginEnd) { var rangeArray = range.Split(':'); if (ibegin >= int.Parse(rangeArray[0]) && iend <= int.Parse(rangeArray[1])) { return true; } } return false; }
public static void Main(string[] args) { string BeginEnd = "100:105,110:120,150:200,240:245"; Dictionary<string, int[]> data = new Dictionary<string, int[]>(); foreach (var val in BeginEnd.Split(",")) { var start = int.Parse(val.Split(":")[0]); var end = int.Parse(val.Split(":")[1]); var range = new int[end - start+1]; for (var i = 0; i < range.Length; i++) { range[i] = start + i; } data.Add(val, range); } var test1 = check(110); var test2 = check(115); var test3 = check(200); var test4 = check(240); Console.WriteLine("test1 {0} ,test2 {1} ,test3 {2} ,test4 {3} ",test1,test2,test3,test4); string check(int value) => data.FirstOrDefault(pair => pair.Value.Contains(value)).Key; }
Si possible, je conseillerais de travailler avec des chaînes délimitées. Si vous devez travailler avec des chaînes comme votre contribution, vous ferez mieux de travailler avec un format bien connu pouvant être validé tel que JSON ou XML.