Wpis z mikrobloga

#csharp #programowanie

Panowie mam problem ponieważ mam tablicę jedno wymiarową string gdzie są same wartości numeryczne (również wartości przecinkowe) a muszę z tego wyznaczyć minimalną wartość... I tu jest problem bo nie mogę tego przekonwertować.. Próbowałem tak :

static double fMin(string[] tab)
{
double[] tab2 = new double[tab.Length];
for (int i = 0; i < tab.Length; i++) {
tab2[i] = Convert.ToDouble(tab[i]);
}

double min = /tab.First()

for (int i = 1; i < tab.Length; i++)
{
if (tab2[i] < min)
min = tab2[i];
}

return min;
}

Lecz niestety wyrzuca mi błąd, że "nieprawidłowy format ciągu wejściowego"... Ktoś mi coś poradzi ;) ?
  • 27
@Phoryn:

gejowskie (bo po stringu), ale najszybsze:

Array.Sort(tab, (x,y) => String.Compare(x.Name, y.Name));


mądrzejsze:

var tab2 = new double[tab.Lengh]

int i = 0;

tab.forEach(x =>

{

tab2[i] = Convert.ToDouble(tab[i])

});

Array.Sort(tab2);

return tab2


da się to pewnie jeszcze prościej zapisać, jakoś tak:

Array.Sort(Array.ConvertAll(tab.Split(','), Double.Parse));


return tab
Lecz niestety wyrzuca mi błąd, że "nieprawidłowy format ciągu wejściowego"... Ktoś mi coś poradzi ;) ?


w pętli np. tab2[i].Replace(',','.'); //cuś takiego może odwrotnie, przecinek z kropką

@Phoryn:
@Kamasetto: Ale namieszałeś... ( ͡° ͜ʖ ͡°) I pewnie nic z tego nie zadziała poprawnie.

Przejrzałbym plik i zrobił to wykorzystując odpowiednią kulturę albo dostosowując ją
var cultureInfo = CultureInfo.InvariantCulture.Clone() as CultureInfo;
cultureInfo.NumberFormat.NumberDecimalSeparator = ","; // tu okreslamy separator dla ułamków
cultureInfo.NumberFormat.NumberGroupSeparator = "."; // tu określamy separator dla tysięcy akurat kropa ale może to być dowolny string
for (int i = 0; i < tab.Length; i++)
@ZapomnialWieprzJakProsiakiemByl: Rozwiązałem to w ten sposób, że napisałem nową metodę która zamienia mi tylko tablicę. I działa ;)

static double[] StringDoTablicy(string[] tab) {

string a;
double[] tablica = new double[tab.Length];
for (int i = 0; i< tab.Length; i++)
{
a = tab[i];
tablica[i] = StringToDouble(a);
}
return tablica;
}

Szkoda, że się tak długo męczyłem nad taką głupotą