Wednesday, May 9, 2012

Sorting String as Integer

Pernahkah Anda menjumpai pengurutan data string tetapi isinya adalah sebuah bilangan? Terkadang dalam kondisi tertentu kita harus membuat tipe data tersebut adalah string, dan bukan integer.

Misal diberikan field 'nilai' dengan data berikut:
8
10
1
34
21

Jika data tersebut diurutkan dengan mengasumsikan tipe data tersebut adalah integer, maka dengan menambahkan fungsi 'orderby nilai' sudah menampilan data terurut secara ascending dari yang paling kecil, seperti ini:
1
8
10
21
34

Masalah yang ada adalah jika data yang ada bertipe string, maka dengan menambahkan fungsi order nilai seperti sebelumnya, maka hasilnya adalah sebagai berikut:
1
10
21
34
8

Hal seperti di atas bisa saja terjadi karena tipe datanya adalah string. String akan mengurutkan berdasarkan karakter, bukan pada besar kecilnya nominal angka, seperti pada bilangan integer.

Terdapat cara praktis untuk mengatasi masalah tersebut, yaitu dengan menambahkan sedikit fungsi pada orderby, seperti berikut:

'orderby nilai.Length, nilai'

Fungsi lengkapnya di LinQ pada .NET jika dituliskan adalah sebagai berikut:

var nilaiSiswa
=
from i in ent.MasterSiswa
orderby i.nilai.Length, i.nilai
select i

Jika akan melakukan fungsi descending dengan menambahkan descending pada kedua statemenent, menjadi:

var nilaiSiswa
=
from i in ent.MasterSiswa
orderby i.nilai.Length descending, i.nilai descending
select i

Memang, keliatan tidak berguna kenapa tipe data tersebut tidak menggunakan integer saja sehingga mudah untuk dilakukan sorting. Tetapi bagaimana jika data yang disajikan seperti ini:

A8
B8
A10
B10
A1
B1
A34
B34
A21
B21

Dengan menambahkan string di depan angka maka tipe data string mutlak diperlukan. Tinggal sedikit melakukan modifikasi query maka sudah dapat melakukan sorting sebagaimana mestinya, dengan kombinasi string dan integer dalam suatu data.

No comments:

Post a Comment