3.939 messaggi dal 28 gennaio 2003
dato un vettore con questi elementi

1_1
1_2
1_10
2_1
2_2
2_3
2_10

sono interessato ai valori univoci della prima parte. Cioè voglio ottenere

1
2

si può fare in fretta, magari con linq?

ciao
42 messaggi dal 13 settembre 2007
Guarda se cosi ti va bene
var vector = new StringCollection(){ "1_1", "1_2", "1_10", "2_1", "2_2", "2_3", "2_10" };

var result = (from record in vector.Cast<string>()
              select record.Substring(0,1)).Distinct();

foreach (var item in result)
     Console.WriteLine(item);



Se ti serve un qualcosa di piu universale (se ikl vettore contiene elementi con due cifre prima del _ per esempio 10_2), puoi usare una cosa del genere
        public void TestVario()
        {
            var vector = new StringCollection(){ "1_1", "1_2", "1_10", "2_1", "2_2", "2_3", "2_10","10_20" };
            var result = (from record in vector.Cast<string>()
                          select GetFirstValues(record)).Where(x=> !string.IsNullOrWhiteSpace(x)).Distinct();

            foreach (var item in result)
                Console.WriteLine(item);
        }

        public string GetFirstValues(string value)
        {
            Regex regex = new Regex(@"^(?<value>\d+)_.*",RegexOptions.IgnoreCase | RegexOptions.Singleline);
            if (regex.IsMatch(value))
                return regex.Match(value).Groups["value"].Value;
            return "";
        }


Ciao
Modificato da roland79 il 20 dicembre 2011 17.07 -
3.939 messaggi dal 28 gennaio 2003
 Davvero molto gentile.
Prima di studiarmelo bene volevo sapere se si può estrarre il vettore ordinato ma secondo ordine numerico (10 dopo il 9 e non dopo 1)

Ciao
42 messaggi dal 13 settembre 2007
Certo che puoi farlo, basta cambiare la funzione di estrazione del numero e poche altre istruzioni:

public void TestVario()
{
    var vector = new StringCollection(){ "1_1", "1_2", "1_10", "2_1", "2_2", "2_3", "2_10","10_20" };
    var result = (from record in vector.Cast<string>()
                    select GetFirstValues(record)).Where(x => x > 0).Distinct().OrderBy(x => x);

    foreach (var item in result)
        Console.WriteLine(item);
}

public int GetFirstValues(string value)
{
    Regex regex = new Regex(@"^(?<value>\d+)_.*",RegexOptions.IgnoreCase | RegexOptions.Singleline);
    if (regex.IsMatch(value))
        return Convert.ToInt32(regex.Match(value).Groups["value"].Value);
    return -1;
}


Ciao, fammi sapere se è ok
Modificato da roland79 il 21 dicembre 2011 08.57 -
3.939 messaggi dal 28 gennaio 2003
 Adesso le studio un poco. Per il momemo BUON NATALE!!!!
3.939 messaggi dal 28 gennaio 2003
Allora, facendo tesoro del tuo codice, trasformato in basic perchè uso il basic ho fatto

Dim vector As String() = {"1_1", "1_2", "1_10", "2_1", "2_2", "2_3", "2_10", "10_20"}

Dim result As Integer() = vector.Select(Function(s) CInt(s.Split("_"c)(0))).Distinct().OrderBy(Function(s) s).ToArray


dove ottengo esattamento quello che voglio

ciao e grazie ancora

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.