Đếm số lần xuất hiện của dữ liệu bằng Dictionary

Liên hệ QC

thaitran.lshb5

Thành viên mới
Tham gia
2/3/22
Bài viết
1
Được thích
0
Các anh chị cho em hỏi ví dụ em có dãy sau, làm thế nào để Dùng dictionary đếm được Bút bi xuất hiện 2 lần ạ. sau đó điền số lần xuất hiện ở cột bên cạnh. em cảm ơn anh/chị rất nhiều.
Bút bi2
Bút Chì1
Bút bi2
 
Cái này dùng dictionary 1 phát ăn ngay, sao các bác triển khai rộng thế nhỉ?
Có thể chủ thớt đang nghiên cứu về dic, muốn dùng dic giải quyết vấn đề này thế thôi.
Dữ liệu lớn thì dùng dic là chuẩn chỉ rồi.

Duyệt qua mảng 2 lần.
Lần 1 để nạp giá trị duy nhất vào key và số đếm vào item
Lần 2 (là cái bạn hỏi) để so sánh với key và lấy item ra.
Nhưng tại sao lại có thêm cái vòng lặp For each ở trong làm gì vậy anh.
 
Upvote 0
Nhưng tại sao lại có thêm cái vòng lặp For each ở trong làm gì vậy anh.
Trong phần giải thích mình đã nói rõ rồi mà : "Lần 2 (là cái bạn hỏi) để so sánh với key và lấy item ra."
"For each key in dic.keys" để duyệt qua từng key trong dic.
 
Upvote 0
Trong phần giải thích mình đã nói rõ rồi mà : "Lần 2 (là cái bạn hỏi) để so sánh với key và lấy item ra."
"For each key in dic.keys" để duyệt qua từng key trong dic.
Tại sao phải duyệt qua khi gán được luôn giá trị nhỉ.
 
Upvote 0
Cái này dùng dictionary 1 phát ăn ngay, sao các bác triển khai rộng thế nhỉ?
Tại bạn quen dùng đít cho nên nó thành ra dễ, cái từ "một phát ăn ngay" là chủ quan.
Đối với người biết dùng đủ công cụ thì nó chỉ là một công cụ.

Có thể chủ thớt đang nghiên cứu về dic, muốn dùng dic giải quyết vấn đề này thế thôi.
Đó là chuyện của thớt. Ở đây, ai cũng biết tôi thích chia sẻ với người khác.

Dữ liệu lớn thì dùng dic là chuẩn chỉ rồi.
Chưa thấy chứng minh. Vả lại, chứng minh cũng khó vì từ "chuẩn" ở đây chưa được tiêu chuẩn hóa. Định nghĩa thế nào là chuẩn?

Nếu từ chuẩn được định nghĩa là dễ hiểu, dễ chỉnh sửa theo quan niệm chung của lập trình (không phải quan niệm đặc thù của GPE) thì với các máy tốt dùng ADODB có thể dễ hơn, dễ đưa vào code thư viện hơn.
 
Upvote 0
Cụ thể thế nào bạn đưa vào code luôn đi
Code đít sần căn bản.

Giả sử các mã cần tổng hợp chứa ở a1:a5, và kết quả ghi vào b1.

Sub t()
Set dc = CreateObject("scripting.dictionary")
For Each v In [a1:a5].Value
dc(v) = dc(v) + 1
Next v
[b1].Resize(dc.Count) = Application.Transpose(dc.keys)
[b1].Resize(dc.Count).Offset(0, 1) = Application.Transpose(dc.items)
End Sub
 
Upvote 0
Cụ thể thế nào bạn đưa vào code luôn đi
Theo mạch code của bác thì nó chỉ vậy:
Mã:
Sub dem()
Dim lr&, i&, rng, dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, "A").End(xlUp).Row
rng = Range("A1:B" & lr).Value
For i = 1 To UBound(rng)
        dic.Item(rng(i, 1)) = 1 + dic.Item(rng(i, 1))
Next
For i = 1 To UBound(rng)
    rng(i, 2) = dic.Item(rng(i, 1))
Next
Range("A1:B" & lr).Value = rng
End Sub
 
Upvote 0
Code dùng ADO:

Sub tt()
Const CNNSTR = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TenFile;Extended Properties=""Excel 12.0 Xml;HDR=No"""
With CreateObject("ADODB.Recordset")
.Open ("Select Max(F1), Count(1) From [Sheet1$A1:A] Where F1 Is Not Null Group By F1"), _
Replace(CNNSTR, "TenFile", ThisWorkbook.FullName)
[D1].CopyFromRecordset .DataSource
End With
End Sub

Tôi không thích ADO lắm. Nhưng đưa ra đây để chứng minh địa vị "chuẩn chỉ" của đít sần chỉ là tưởng tượng.

Chú thích: code chôm của Hai Lúa Miền Tây, sửa lại chút.
 
Upvote 0
Code dùng ADO:

Sub tt()
Const CNNSTR = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TenFile;Extended Properties=""Excel 12.0 Xml;HDR=No"""
With CreateObject("ADODB.Recordset")
.Open ("Select Max(F1), Count(1) From [Sheet1$A1:A] Where F1 Is Not Null Group By F1"), _
Replace(CNNSTR, "TenFile", ThisWorkbook.FullName)
[D1].CopyFromRecordset .DataSource
End With
End Sub

Tôi không thích ADO lắm. Nhưng đưa ra đây để chứng minh địa vị "chuẩn chỉ" của đít sần chỉ là tưởng tượng.

Chú thích: code chôm của Hai Lúa Miền Tây, sửa lại chút.
ADO lại phải học thêm câu lệnh Sql.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom