3

Possible Duplicate:
How to avoid returning a Null if there is no “else” condition in an If contruct

I know there are other ways to solve this problem. Just because I'm curious I tried:

Map[If[# == 1, , #] &, {2, 1, 3, 1, 4}]

This should return a list without the value 1, because when the statement is true it should do nothing. The solution should be:

{2,3,4}

and not

{2,Null,3,Null,4}

Why is it not working as I expect?

RMMA
  • 2,710
  • 2
  • 18
  • 33
  • thank you ssch. I know that this works. Just wanted to know if there is a possibility to get the solution out of the if directly. – RMMA Dec 21 '12 at 10:06
  • 2
    Map[If[# == 1, Unevaluated[Sequence[]], #] &, {2, 1, 3, 1, 4}] in that case :) – ssch Dec 21 '12 at 10:08
  • 1
    Frink, please try to make an effort to find existing questions which address your problem before asking a new one. In this case a search for "If Null" would have brought up the proper question as the first result. – Mr.Wizard Dec 21 '12 at 15:03
  • Another duplicate: http://mathematica.stackexchange.com/q/3447/5 – rm -rf Dec 21 '12 at 15:50
  • @rm-rf Indeed. Should we close one of these (3447/3700) as well? – Mr.Wizard Dec 21 '12 at 23:05
  • @Mr.Wizard I think so. I did vote to close 3700 as a dupe of 3447 when it was asked (as did rcollyer), but it expired. Perhaps we should close 3447 -> 3700 (even though the former is older) because 3700 has a better title and more views (probably because it is easier to search for) – rm -rf Dec 21 '12 at 23:18

1 Answers1

8

Your If statement is actually

If[# == 1, Null, #]

so it is working perfectly. Try evaluating

Hold@Map[If[# == 1, , #] &, {2, 1, 3, 1, 4}]

to see for yourself. To get what you want, try

Map[If[# == 1, Unevaluated@Sequence[], #] &, {2, 1, 3, 1, 4}]
m_goldberg
  • 107,779
  • 16
  • 103
  • 257