2014-10-15 4 views
3

사용자가 입력 한 몇 가지 값에서 생성 된 쉼표로 구분 된 문자열을 삽입하려고합니다. 특정 값이 비어 있으면 그 값을 삽입하고 싶지 않습니다. 내 문제는 nil 함수를 반환 할 때 mapconcat 여전히 구분 기호를 삽입하는 것입니다. 또한 같은 결과를 가진 함수 대신 목록에서 unless 컨트롤을 사용하여이 작업을 시도했습니다. 사용자로부터의 값 "foo", """bar" 경우mapconcat에서 빈 문자열을 무시 하시겠습니까?

(insert (mapconcat 
     (function (lambda (x) (unless (string-equal x "") x)))) 
     (list input-a input-b input-c) 
     ", ")) 

, 출력 "foo, , bar" 것; 나는 그것이 "foo, bar"이되고 싶습니다. 입력 값이 비어있을 때 구분 기호가 삽입되지 않게하려면 어떻게해야합니까?

+0

공백 만 포함 된 문자열을 무시 하시겠습니까? 예 :'' "'? –

답변

6

는 귀하의 목록에 nil 값을 포함하고 mapconcat 여전히 사람들을 처리합니다, 그래서 먼저 목록에서 불필요한 항목을 제거하는 방법이 필요합니다.

정확히 어떻게 수행 할 것인가는 원래 양식으로 목록을 유지해야하는지 여부에 따라 달라집니다. 여기 는 원래 목록 수정하지 않는 옵션들 : 원본이 필요하지 않은 경우

(setq my-list (list "foo" "" "bar")) 
(mapconcat 'identity 
      (remove "" my-list) 
      ", ") 

, 당신은 delete 대신 remove을 사용할 수는; 그렇다면 delete에 대한 도움말을 읽어보십시오.

관련 문제