- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
也许是一个时髦的标题,但我遇到了以下问题:
给定一个类型为 (a * b) list
的列表,我想创建一个类型为 (a * b list) list
的新列表。一个例子:
给定列表 let testList = [(1,"c");(2,"a");(1,"b")]
,我的函数应该返回 [( 1, ["c";"b"]; (2, ["a"])]
.
我有以下内容,但我对如何继续有点困惑:
let rec toRel xs =
match xs with
| (a,b)::rest -> (a,[b])::toRel rest
| _ -> []
1 Câu trả lời
可以使用内置函数List.groupBy
然后map去除多余的key:
testList |> List.groupBy fst |> List.map (fun (k,v) -> (k, List.map snd v))
// val it : (int * string list) list = [(1, ["c"; "b"]); (2, ["a"])]
否则如果你想继续比赛你可以这样做:
let toRel x =
let rec loop acc xs =
match xs with
| (k, b) :: rest ->
let acc =
match Map.tryFind k acc with
| Some v -> Map.add k (b::v) acc
| None -> Map.add k [b] acc
loop acc rest
| _ -> acc
loop Map.empty x |> Map.toList
或者使用Option.toList
你可以这样写:
let toRel x =
let rec loop acc xs =
match xs with
| (k, b) :: rest ->
let acc =
let lst = Map.tryFind k acc |> Option.toList |> List.concat
Map.add k (b::lst) acc
loop acc rest
| _ -> acc
loop Map.empty x |> Map.toList
关于list - 给定一个 (a * b) 列表,返回一个 (a * b list) 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773823/
Tôi có hai cấu trúc, Header và Session, cả hai đều tuân thủ giao thức TimelineItem. Tôi có một Mảng bao gồm TimelineItem như thế này: [Header1, S
Câu hỏi này đã có câu trả lời ở đây: Thứ tự gán và đánh giá nhiều trong Python (11 câu trả lời) Đã đóng 6 năm trước. Tôi mới học python nên tôi muốn hỏi bạn
Tôi đang cố tìm cách để có được danh sách tất cả các hoán vị duy nhất có thể có của A, A, A, A, B, B, B, B trong R. Sự kết hợp ban đầu được coi là một cách để tìm ra giải pháp, do đó có câu trả lời kết hợp. Câu trả lời hay nhất Tôi nghĩ đây chính là điều bạn đang tìm kiếm. @tỷ
Làm thế nào tôi có thể kết hợp hai vectơ cho trước thành một vectơ mới có giá trị xen kẽ? (f [aa] [bb]) ; > [abab] Đây là những gì tôi nghĩ ra: (làm phẳng (bản đồ vector [:a
Đây là câu hỏi đầu tiên của tôi và tôi đang bắt đầu học Python. Có sự khác biệt nào giữa: a, b = b, a + b và a = bb = a + b không? Khi bạn viết trong ví dụ dưới đây, nó cho thấy các kết quả khác nhau. định nghĩa fib(n):
Câu hỏi này đã có câu trả lời tại đây: Tại sao lại có tên lớp được tiêm? (1 câu trả lời) Đã đóng 12 tháng trước. Tôi không biết cách diễn giải: namespace A { struct
Tôi đang thử một số mã để hoán đổi hai số nguyên trong Java mà không sử dụng biến thứ ba, bằng cách sử dụng XOR. Sau đây là hai hàm hoán đổi mà tôi đã thử: package lang.numeric; public class SwapVars
Giả sử lớp B mở rộng lớp A và tôi muốn khai báo một biến cho B. Cách nào hiệu quả hơn? Tại sao? B b hoặc A b. Câu trả lời hay nhất Bạn đang nhầm lẫn hai khái niệm khác nhau. lớp B mở rộng A { } có nghĩa là B là lớp con của A.
Tôi không chắc tiêu đề của câu hỏi này là gì, đây cũng có thể là một câu hỏi trùng lặp. Vì vậy, xin hãy hướng dẫn cho phù hợp. Tôi mới làm quen với lập trình Python. Tôi có đoạn mã đơn giản này để tạo chuỗi Fibonacci. 1: định nghĩa fibo(n): 2: a =
Tôi đã tìm kiếm trên Google về dynamic_cast và phát hiện ra rằng việc ép kiểu rõ ràng một đối tượng lớp cơ sở thành một con trỏ lớp dẫn xuất có thể không an toàn. Nhưng khi tôi chạy một số mã mẫu để kiểm tra, tôi không gặp lỗi nào. Vui lòng tìm mã của tôi bên dưới: lớp
Câu hỏi này đã có câu trả lời tại đây: Cú pháp dấu hai chấm (" : ") kỳ lạ này trong hàm tạo là gì? (14 câu trả lời) Đã đóng 8 năm trước.
Cách thông dụng để đạt được mục đích sau mà không cần phải tạo lại biểu thức tạo ra giá trị không phải số nguyên (trong trường hợp thực tế của tôi, giá trị được tính theo phần trăm sau một truy vấn dài mà tôi không muốn tạo lại): SELECT * FROM SomeTable WHERE 1/
Trong quá trình phá hủy, kết quả của hai mã này thực sự khác nhau. Tôi không chắc tại sao. Mẹo này nói rằng const [b,a] = [a,b] sẽ dẫn đến giá trị của a và b không xác định (quy tắc gán đơn giản từ trái sang phải). Tôi không hiểu tại sao chuyện này lại xảy ra. tôi
Mẫu C++ - Hướng dẫn đầy đủ, Phiên bản 2 giới thiệu mẫu max: mẫu T max (T a, T b) { // nếu b < a th
Gần đây tôi bắt đầu học lập trình (Java) và tra cứu toán tử modulo trên trang web Oracle trong phần 15.17.3. Liên kết sau đây: http://docs.oracle.com/javase/specs/jls/se8/
Không thể hiểu được hành vi sau đây. Sự khác biệt giữa d1 := &data{1}; và d2 := data{1}; &d1. Cả hai đều là con trỏ, đúng không? Nhưng chúng lại có cách cư xử khác nhau. Chuyện gì xảy ra ở đây? gói chính nhập "f
Câu hỏi này đã có câu trả lời ở đây: Làm thế nào để tạo vòng lặp vô hạn với "x = y && x != y"? (4 câu trả lời) Làm thế nào để tôi có thể định nghĩa các biến
Trong chương trình của tôi, khi tôi gỡ lỗi mã của mình, có vẻ như ở đâu đó trong mã, tôi tạo ra X1=['[a,a,a]','[b,b,b]'] và ở đâu đó khác, tôi tạo ra X2=[[a,a,a],[b,b,b]] và khi tôi muốn thêm hai danh sách này thì
Tôi đang cố gắng nhân hai số nguyên bằng cách sử dụng đệ quy và vô tình viết mã này: //phiên bản gốc int multiply(int a, int b) { if ( !b ) return
Tôi có một danh sách tất cả các tổ hợp phép toán có thể có giữa các số: list = ['2','7','8'] 7+8*2 8+7*2 2*8+7 2+8*7 2-8*7 8-2/7 v.v. Tôi tự hỏi liệu có thể nói điều gì đó như ('7*2+
Tôi là một lập trình viên xuất sắc, rất giỏi!